iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 12
0

Dockerfile是以YAML格式撰寫的檔案,其內容是用一行一行指令組成,是用來描述映像檔如何生成的行為。

Dockerfile的結構

文件中#開頭代表註解

# dockerfile
# Author: 阿榜
# Version: 1.0.0

FROM是基底映像檔

FROM golang:1.15.2-alpine3.12
  • 必需是「第一個」可執行指令,以這一個Image為基底來建構。
  • 格式:FROM <image>FROM <image>:<tag>

WORKDIR設定工作目錄

WORKDIR /app
  • 目錄不存在,會自動建立

RUN執行指定的指令

# only for demo
RUN mkdir -p /home/demo/hello
RUN ["apt-get", "install", "curl"]
RUN apt-get update && apt-get install -y --force-yes nginx \
php5-fpm \
php5
  • 格式:RUN <command>RUN ["executable", "param1", "param2"]
  • RUN指令時,執行的指令過長,可以用\符號來換行,比較容易閱讀。
  • 使用exec形式執行時,必需使用JSON array的格式,格式內需使用雙引號
  • RUN多個指令時,可以利用&&來串連多個命令。

COPY複製本地的檔案/目錄到映像檔的指定位置中

COPY env.yaml config.yaml ./
  • 格式:COPY [–chown=<user>:<group>] <src>… <dest>

ADD和COPY一樣,可將本地端的檔案/目錄加到映像檔的指定位置

ADD env.yaml config.yaml ./
  • 格式:ADD [–chown=<user>:<group>] <src>… <dest>

EXPOSE對外的連接埠

EXPOSE 8080/tcp
  • 格式:EXPOSE <port> [<port>/<protocol>…]

ENV設定環境變數

ENV GO111MODULE=on
  • 格式:ENV <key> <value>ENV <key>=<value> …
  • ENV建起來的Container裡也可以使用該變數。

CMD映像檔啟動時,預設要執行的指令

CMD ["Hello"]
  • 格式:CMD [“executable”,”param1″,”param2″]CMD [“param1″,”param2”]CMD command param1 param2
  • Dockerfile中只能有一行CMD,若有多行CMD,則只有最後一行會被執行。

小結

透過Dockerfile我們可以把應用程式需要的建置流程寫進去,運維人員不用再考慮如何架設機器環境一致性,可以大大降低在部署系統時的複雜度。


上一篇
Day11 認識Docker
下一篇
Day13 Docker實戰
系列文
微服務系統建置與監控30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言